package com.atguigu.springboot.controller;

import com.atguigu.springboot.bean.Employee;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Created by Smexy on 2022/10/10
 *
 *      @Controller的作用；
 *              ①标记这是一个控制器
 *              ②容器扫描到这个注解时，自动为这个注解标注的类，创建一个单例对象
 *
 *
 *        能不能帮我写个(数据)接口。
 *          请你不要直接  new Interface
 *
 *          我请求 a 地址，返回我想要的数据！
 *
 */
//@Controller //尊贵的控制器
    @RestController // @Controller的功能 + 为这个类的所有方法都标注 @ResponseBody 注解
public class HelloController
{

    //把方法和所处理的url请求对应上   http://localhost:8080(省略)    /hello
    @RequestMapping(value = "/hello")
    public String  handle1(){

        System.out.println("收到了前台的hello请求");

        //返回一个 成功页面
        return "a.html";

    }

    /*
            只需要在处理方法的形参位置声明和 前台传递的参数 名字一样的形参即可

            type=Method Not Allowed, status=405

            前台发送url的请求方式，不被后台程序允许！
     */
    //@RequestMapping("/hi")
    //@GetMapping("/hi")
    @PostMapping("/hi")
    public String  handle2(String lastName,Integer age){

        System.out.println("收到了前台的hello参数: lastName:"+lastName +",age: "+age);

        //返回一个 成功页面
        //报错405
        return "a.html";

    }

    /*
        返回的是字面量(字面上就知道变量值的变量)

        int a= 1
        String b = "haha"
                直接放入响应体

        非字面量:
          Employee e =  new Employee()

                把对象转为json，再放入响应体
     */
    @RequestMapping("/getData1")
    //@ResponseBody //把返回值放入响应体，返回数据，而不是返回页面
    public String  handle3(){

        //返回一个字符串:  只因你太美
        return "只因你太美";

    }

    @RequestMapping("/getData2")
    //@ResponseBody
    public Object  handle4(){

        Employee employee1 = new Employee(1, "tom", "male", "aaa");

        //返回一个员工
        return employee1;

    }


    /*
            如果前台传入的参数是一个 json，后台如何接收?

            举例: {"id":1,"lastName":"tom","gender":"male","email":"aaa"}
            后台想接收，如何做?
                    ①根据数据的结构，封装一个数据模型(Bean)
                    ②使用Map封装

              @RequestBody: 只用于接收json
     */
    @RequestMapping("/getJson")
    public Object  handle5(@RequestBody  Employee e){

        System.out.println(e);
        //返回一个员工
        return "成功";

    }

    @RequestMapping("/a/{haha}/c")
    public Object  handle6(@PathVariable("haha") String e){

        System.out.println(e);

        return "成功";

    }

    //@RequestMapping默认可接受任何类型的请求
    //@GetMapping: 只接收get请求
    //@PostMapping: 只接收post请求

}
